The ability to perform sophisticated vector and scalar arithmetic operations in real time is an important aspect of computer systems. Often, however, this requirement is also accompanied by physical constraints upon the size, weight, power, and cooling of the computer system. System designers must privilege certain components and features when producing a computer system. Consequently, a compromise between competing design requirements is an inevitable part of modern systems design. In many cases, this compromise results in processors with inadequate performance. As mobile computing becomes more prevalent, issues such as circuit size and power consumption take on an increasingly greater importance.
Digital electronic circuitry often operates on information contained in many parallel data bits. To perform mathematical operations within digital electronic circuitry, it is often necessary to shift these data bits left or right by a selected number of bit positions. The ability to manipulate the position of binary data bits in a parallel data word is required for a large number of binary operations, including arithmetic operations such as multiplication and division.
Further, data within a computer or other digital circuit is typically organized into one or more standard data sizes, referred to as data words. For example, a common data word size contains 32 bits of binary data. The size of a data word affects the precision and/or resolution of the information contained within the digital circuit, with larger data sizes allowing greater precision and/or resolution because they can represent more values. However, larger data words require larger digital circuits to manipulate the data, leading to greater cost, increased required area, and added complexity. In addition to manipulating data of a maximum possible size, a computing system may also need to manipulate data of smaller, evenly divided sizes. For example, a computer system with a maximum data word size of 32 bitsmight also manipulate eight-bit or 16-bit data.
Some shifters can shift bits left or right by a predetermined amount. Different types of shifts are possible; for example, an arithmetic shift is used to multiply or divide a binary value by a factor that is a power of two while preserving the arithmetic sign of the value. Another type of shift, a so-called logical shift, serves to move bit patterns of the binary value or word to the left or right within the word in order to reposition a series of bits from the lower half to the upper half of the word.
A shifter also includes control signals for performing the loading of a binary input word and performing the shifting of the binary word to the right or left by a specified number of bits. Also, new data—such as a new bit value to take the place of a bit value being shifted away from either the left or right edges of the computer word within the shifter—can be specified. Even in a rapidly changing era of computer system design, shifters continue to serve as fundamental building blocks for a wide variety of digital logic circuits in various applications.